home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / misc / gdbm.lha / gdbm-1.7.3 / systems.h < prev    next >
C/C++ Source or Header  |  1999-12-12  |  4KB  |  160 lines

  1. /* systems.h - Most of the system dependant code and defines are here. */
  2.  
  3. /*  This file is part of GDBM, the GNU data base manager, by Philip A. Nelson.
  4.     Copyright (C) 1990, 1991, 1993  Free Software Foundation, Inc.
  5.  
  6.     GDBM is free software; you can redistribute it and/or modify
  7.     it under the terms of the GNU General Public License as published by
  8.     the Free Software Foundation; either version 2, or (at your option)
  9.     any later version.
  10.  
  11.     GDBM is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.     GNU General Public License for more details.
  15.  
  16.     You should have received a copy of the GNU General Public License
  17.     along with GDBM; see the file COPYING.  If not, write to
  18.     the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  
  20.     You may contact the author by:
  21.        e-mail:  phil@wwu.edu
  22.       us-mail:  Philip A. Nelson
  23.                 Computer Science Department
  24.                 Western Washington University
  25.                 Bellingham, WA 98226
  26.        
  27. *************************************************************************/
  28.  
  29.  
  30. #ifdef __GNUC__
  31. #define alloca    __builtin_alloca
  32. #else    /* not __GNUC__ */
  33. #ifdef HAVE_ALLOCA_H
  34. #include <alloca.h>
  35. #endif    /* not HAVE_ALLOCA_H */
  36. #endif     /* not __GNUC__ */
  37.  
  38. /* Include all system headers first. */
  39. #if HAVE_SYS_TYPES_H
  40. #include <sys/types.h>
  41. #endif
  42. #include <stdio.h>
  43. #if HAVE_SYS_FILE_H
  44. #include <sys/file.h>
  45. #endif
  46. #include <sys/stat.h>
  47. #if HAVE_STDLIB_H
  48. #include <stdlib.h>
  49. #endif
  50. #if HAVE_STRING_H
  51. #include <string.h>
  52. #else
  53. #include <strings.h>
  54. #endif
  55. #if HAVE_UNISTD_H
  56. #include <unistd.h>
  57. #endif
  58. #if HAVE_FCNTL_H
  59. #include <fcntl.h>
  60. #endif
  61.  
  62. #ifndef SEEK_SET
  63. #define SEEK_SET        0
  64. #endif
  65.  
  66. #ifndef L_SET
  67. #define L_SET SEEK_SET
  68. #endif
  69.  
  70. /* Do we have flock?  (BSD...) */
  71.  
  72. #if HAVE_FLOCK
  73.  
  74. #ifndef LOCK_SH
  75. #define LOCK_SH    1
  76. #endif
  77.  
  78. #ifndef LOCK_EX
  79. #define LOCK_EX    2
  80. #endif
  81.  
  82. #ifndef LOCK_NB
  83. #define LOCK_NB 4
  84. #endif
  85.  
  86. #ifndef LOCK_UN
  87. #define LOCK_UN 8
  88. #endif
  89.  
  90. #define UNLOCK_FILE(dbf) flock (dbf->desc, LOCK_UN)
  91. #define READLOCK_FILE(dbf) lock_val = flock (dbf->desc, LOCK_SH + LOCK_NB)
  92. #define WRITELOCK_FILE(dbf) lock_val = flock (dbf->desc, LOCK_EX + LOCK_NB)
  93.  
  94. #else
  95.  
  96. /* Assume it is done like System V. */
  97.  
  98. #define UNLOCK_FILE(dbf) \
  99.     {                    \
  100.       struct flock flock;            \
  101.       flock.l_type = F_UNLCK;        \
  102.       flock.l_whence = SEEK_SET;        \
  103.       flock.l_start = flock.l_len = 0L;    \
  104.       fcntl (dbf->desc, F_SETLK, &flock);    \
  105.     }
  106. #define READLOCK_FILE(dbf) \
  107.     {                    \
  108.       struct flock flock;            \
  109.       flock.l_type = F_RDLCK;        \
  110.       flock.l_whence = SEEK_SET;            \
  111.       flock.l_start = flock.l_len = 0L;    \
  112.       lock_val = fcntl (dbf->desc, F_SETLK, &flock);    \
  113.     }
  114. #define WRITELOCK_FILE(dbf) \
  115.     {                    \
  116.       struct flock flock;            \
  117.       flock.l_type = F_WRLCK;        \
  118.       flock.l_whence = SEEK_SET;            \
  119.       flock.l_start = flock.l_len = 0L;    \
  120.       lock_val = fcntl (dbf->desc, F_SETLK, &flock);    \
  121.     }
  122. #endif
  123.  
  124. /* Do we have bcopy?  */
  125. #if !HAVE_BCOPY
  126. #if HAVE_MEMORY_H
  127. #include <memory.h>
  128. #endif
  129. #define bcmp(d1, d2, n)    memcmp(d1, d2, n)
  130. #define bcopy(d1, d2, n) memcpy(d2, d1, n)
  131. #endif
  132.  
  133. /* Do we have fsync? */
  134. #if !HAVE_FSYNC
  135. #define fsync(f) {sync(); sync();}
  136. #endif
  137.  
  138. /* Default block size.  Some systems do not have blocksize in their
  139.    stat record. This code uses the BSD blocksize from stat. */
  140.  
  141. #if HAVE_ST_BLKSIZE
  142. #define STATBLKSIZE file_stat.st_blksize
  143. #else
  144. #define STATBLKSIZE 1024
  145. #endif
  146.  
  147. /* Do we have ftruncate? */
  148. #if HAVE_FTRUNCATE
  149. #define TRUNCATE(dbf) ftruncate (dbf->desc, 0)
  150. #else
  151. #define TRUNCATE(dbf) close( open (dbf->name, O_RDWR|O_TRUNC, mode));
  152. #endif
  153.  
  154. /* Do we have 32bit or 64bit longs? */
  155. #if LONG_64_BITS || !INT_16_BITS
  156. typedef int word_t;
  157. #else
  158. typedef long word_t;
  159. #endif
  160.